package com.cx.common.gateway.filter;

import org.springframework.web.server.ServerWebExchange;

public interface BaseFilter {

    /**
     * 每次请求服务端返回当前时间
     */
    String X_SERVER_TIMESTAMP = "X-Server-TimeStamp";
    /**
     * 响应结果是否加密
     */
    String X_SERVER_ENCRYPT = "X-Server-Encrypt";
    /**
     * 客户端请求时间戳
     */
    String X_CLIENT_TIMESTAMP = "X-Client-TimeStamp";
    /**
     * 客户端标识
     * APP/[终端类型;bundleID包名;版本号;渠道包code] SDI/[设备号:用户id] SYS/[系统型号:系统版本] FM/[厂家;型号] NE/[网络类型] LANG/[系统语言]
     */
    String X_CLIENT_IDENTITY = "X-Client-Identity";
    /**
     * 客户端API签名串
     */
    String X_CLIENT_SIGNATURE = "X-Client-Signature";
    /**
     * 用户认证token
     */
    String X_AUTH_TOKEN = "Authorization";
    /**
     * API请求失效时间秒
     */
    int API_SIGN_EXPIRE = 2 * 60;
    /**
     * 客户端baseRequest
     */
    String CLIENT_BASE_REQUEST = "CLIENT_BASE_REQUEST";
    /**
     * 客户端每次POST请求body
     */
    String CLIENT_REQUEST_BODY = "CLIENT_REQUEST_BODY";
    /**
     * 客户端每次POST请求通过RSA解密出来的AES加密key用于对响应结果加密
     */
    String CLIENT_REQUEST_AES_KEY = "CLIENT_REQUEST_AES_KEY";
    /**
     * 客户端每次POST请求AES解密出来的body
     */
    String CLIENT_REQUEST_DECRYPT_BODY = "CLIENT_REQUEST_DECRYPT_BODY";
    /**
     * 服务端响应请求结果
     */
    String SERVER_RESPONSE_RESULT = "SERVER_RESPONSE_RESULT";
    /**
     * 服务端响应请求AES加密结果
     */
    String SERVER_RESPONSE_ENCRYPT_RESULT = "SERVER_RESPONSE_ENCRYPT_RESULT";

    /**
     * 服务端用户登陆信息
     */
    String SERVER_ACCOUNT_LOGIN_INFO = "SERVER_ACCOUNT_LOGIN_INFO";

    /**
     * 动态API版本号
     */
    String API_VERSION = "Api-Version";


    /**
     * 是否执行filter
     * true表示执行filter内容，false跳过执行下一个filter
     *
     * @param exchange
     * @param run
     */
    default void shouldFilter(ServerWebExchange exchange, boolean run) {
        exchange.getAttributes().put("shouldFilter",
                run ? Boolean.TRUE.toString() : Boolean.FALSE.toString());
    }
}
